package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

func main() {
	//添加协程阻塞方法, 设置后,, 可以配置协程执行顺序,最后让main函数执行
	/*
		1. waitGroup 同步等待组
		2. add() 设置等待组中要执行的子 groutine的数量

			wait(), 让主goroutine处于等待状态

	*/
	wg.Add(2) //创建数值为2的同步等待组
	go run()
	wg.Add(2) // 说明在waitGroup值还未减少为0时,可以继续增加组内数量

	go run2()

	wg.Done() //这个代码代表去调同步等待组中的一个值
	wg.Done() //只有同步等待组中的值为0时,才会让wg.wait()后面的函数进行执行
	fmt.Println("主程序进入阻塞状态")
	wg.Wait()
	fmt.Println("主程序开始继续执行!")
}
func run() {
	defer wg.Done()
	for i := 0; i < 10; i++ {
		fmt.Println("同步等待组1:", i)

	}
}
func run2() {
	defer wg.Done()

	for i := 0; i < 10; i++ {
		fmt.Println("同步等待组2:", i)

	}
}
